<template>
	<view class="invite-container">
		<!-- 顶部背景 -->
		<view class="header-bg">
			<view class="header-content">
				<view class="welcome-text">欢迎加入</view>
				
				<view class="inviter-info" v-if="inviterInfo">
					<text class="inviter-text">邀请人：{{ inviterInfo.nickname || inviterInfo.name || '匿名用户' }}</text>
				</view>
			</view>
		</view>
		
		<!-- 主要内容区域 -->
		<view class="main-content">
			<!-- 绑定状态显示 -->
			<view class="binding-status" v-if="bindingStatus">
				<view class="status-icon" :class="bindingStatus">
					<text v-if="bindingStatus === 'success'">✅</text>
					<text v-else-if="bindingStatus === 'failed'">❌</text>
					
				</view>
				<text class="status-message">{{ bindingMessage }}</text>
			</view>
			
			<!-- 邀请人信息 -->
			<view class="inviter-section" v-if="inviterInfo">
				<view class="inviter-title">
					<text class="title-icon">👤</text>
					<text>邀请人信息</text>
				</view>
				<view class="inviter-card">
					<text class="inviter-name">{{ inviterInfo.nickname || inviterInfo.name || '匿名用户' }}</text>
					<text class="inviter-id">邀请码：{{ inviteCode }}</text>
				</view>
			</view>
			
			<!-- 绑定说明 -->
			<view class="binding-info">
				<view class="info-title">
					
					<text>绑定说明</text>
				</view>
				<view class="info-content">
					<text class="info-text">您正在通过邀请链接加入</text>
					<text class="info-text">绑定成功后，您将获得邀请人的推荐关系</text>
					<text class="info-text">请点击下方按钮完成身份绑定</text>
				</view>
			</view>
		</view>
		
		<!-- 底部操作按钮 -->
		<view class="action-section">
			<button 
				class="bind-btn" 
				@click="bindInviteRelation" 
				:disabled="bindingStatus === 'pending'"
				v-if="!bindingStatus || bindingStatus === 'failed'"
			>
				
				<text>{{ bindingStatus === 'pending' ? '绑定中...' : '绑定邀请关系' }}</text>
			</button>
			<button 
				class="confirm-btn" 
				@click="goToMyPage"
				v-if="bindingStatus === 'success'"
			>
		
				<text>确定</text>
			</button>
		</view>
		
		<!-- 加载遮罩 -->
		<view class="loading-mask" v-if="loading">
			<view class="loading-content">
				<view class="loading-spinner"></view>
				<text class="loading-text">加载中...</text>
			</view>
		</view>
	</view>
</template>

<script lang="ts" setup>
import { onLoad } from '@dcloudio/uni-app';
import { ref, computed } from 'vue';
import { inviteLinkageUser } from '@/utils/api';

// 页面参数
const inviteCode = ref('');
const inviterInfo = ref<any>(null);
const loading = ref(false);
const bindingStatus = ref(''); // 绑定状态：pending, success, failed
const bindingMessage = ref('');
const isLoggedIn = ref(false); // 用户登录状态


// 页面加载
onLoad(async (options: any) => {
	console.log('页面加载参数:', options);
	
	// 检查是否是微信授权回调
	if (options?.login === 'success' && options?.token && options?.user_id) {
		console.log('检测到微信授权回调，保存登录信息');
		saveLoginInfoFromCallback(options.token, options.user_id, options.openid);
	}
	
	// 从URL参数获取邀请码，支持uid和pid两种参数名
	const inviteCodeParam = options?.uid || options?.pid;
	if (inviteCodeParam) {
		inviteCode.value = inviteCodeParam;
		console.log('邀请码:', inviteCode.value);
		
		// 获取邀请人信息
		await loadInviterInfo(inviteCodeParam);
	} else {
		console.log('未找到邀请码参数');
	}
	
	// 检查当前用户登录状态
	let currentUserId = uni.getStorageSync('id') || uni.getStorageSync('user_id');
	
	// 如果没获取到，尝试从h5_login_data中解析
	if (!currentUserId) {
		const h5LoginData = uni.getStorageSync('h5_login_data');
		if (h5LoginData) {
			try {
				const loginData = JSON.parse(h5LoginData);
				currentUserId = loginData.user_id || loginData.id;
				console.log('从h5_login_data获取用户ID:', currentUserId);
			} catch (e) {
				console.error('解析h5_login_data失败:', e);
			}
		}
	}
	
	// 如果还是没获取到，尝试从h5_user_info中获取
	if (!currentUserId) {
		const h5UserInfo = uni.getStorageSync('h5_user_info');
		if (h5UserInfo) {
			try {
				const userInfo = JSON.parse(h5UserInfo);
				currentUserId = userInfo.id;
				console.log('从h5_user_info获取用户ID:', currentUserId);
			} catch (e) {
				console.error('解析h5_user_info失败:', e);
			}
		}
	}
	
	console.log('当前用户ID:', currentUserId);
});

// 加载邀请人信息
const loadInviterInfo = async (uid: string) => {
	try {
		// 这里可以调用API获取邀请人信息
		// const res: any = await getUserInfo({ id: uid });
		// if (res.code === 1) {
		// 	inviterInfo.value = res.data.user;
		// }
		console.log('邀请人ID:', uid);
	} catch (error) {
		console.error('获取邀请人信息失败:', error);
	}
};

// 绑定邀请关系
const bindInviteRelation = async () => {
	if (!inviteCode.value) {
		uni.showToast({
			title: '邀请码不能为空',
			icon: 'none'
		});
		return;
	}
	
	// 检查用户是否已登录
	let currentUserId = uni.getStorageSync('id') || uni.getStorageSync('user_id');
	
	// 如果没获取到，尝试从h5_login_data中解析
	if (!currentUserId) {
		const h5LoginData = uni.getStorageSync('h5_login_data');
		if (h5LoginData) {
			try {
				const loginData = JSON.parse(h5LoginData);
				currentUserId = loginData.user_id || loginData.id;
			} catch (e) {
				console.error('解析h5_login_data失败:', e);
			}
		}
	}
	
	// 如果还是没获取到，尝试从h5_user_info中获取
	if (!currentUserId) {
		const h5UserInfo = uni.getStorageSync('h5_user_info');
		if (h5UserInfo) {
			try {
				const userInfo = JSON.parse(h5UserInfo);
				currentUserId = userInfo.id;
			} catch (e) {
				console.error('解析h5_user_info失败:', e);
			}
		}
	}
	
	if (currentUserId) {
		// 用户已登录，先验证用户是否存在
		bindingStatus.value = 'pending';
		bindingMessage.value = '正在验证用户信息...';
		
		try {
			// 验证用户并绑定邀请关系
			const userValid = await validateUserExists(currentUserId);
			if (!userValid) {
				// 用户不存在或token无效，清除登录信息并跳转登录
				clearLoginData();
				redirectToLogin();
				return;
			}
			
			// 如果验证通过且绑定成功，显示成功状态
			bindingStatus.value = 'success';
			bindingMessage.value = '绑定成功！您已成功加入邀请人的团队';
			uni.showToast({
				title: '绑定成功',
				icon: 'success'
			});
		} catch (error) {
			console.error('绑定邀请关系失败:', error);
			bindingStatus.value = 'failed';
			bindingMessage.value = '绑定失败，请稍后重试';
			uni.showToast({
				title: '绑定失败',
				icon: 'none'
			});
		}
	} else {
		// 用户未登录，跳转到登录页面
		uni.showToast({
			title: '请先登录完成邀请绑定',
			icon: 'none'
		});
		
		setTimeout(() => {
			uni.navigateTo({
				url: `/pages/login/h5login?pid=${inviteCode.value}`
			});
		}, 1500);
	}
};


// 清除登录数据
const clearLoginData = () => {
	uni.removeStorageSync('h5_login_data');
	uni.removeStorageSync('h5_user_info');
	uni.removeStorageSync('id');
	uni.removeStorageSync('user_id');
	uni.removeStorageSync('token');
	console.log('已清除所有登录数据');
};

// 跳转到登录页面
const redirectToLogin = () => {
	isLoggedIn.value = false;
	uni.showToast({
		title: '登录已过期，请重新登录',
		icon: 'none'
	});
	
	setTimeout(() => {
		uni.navigateTo({
			url: `/pages/login/h5login?pid=${inviteCode.value}`
		});
	}, 1500);
};

// 验证用户是否存在
const validateUserExists = async (userId: string): Promise<boolean> => {
	try {
		// 直接尝试调用 inviteUser 接口来验证用户是否存在
		// 这个接口不需要登录，如果用户不存在会返回相应错误
		console.log('开始验证用户，用户ID:', userId);
		
		const res: any = await inviteLinkageUser({
			inviter_id: parseInt(inviteCode.value),
			new_user_id: parseInt(userId)
		});
		
		console.log('用户验证响应:', res);
		
		if (res.code === 1) {
			// 绑定成功，用户存在且有效
			isLoggedIn.value = true;
			console.log('用户验证成功，绑定完成');
			return true;
		} else if (res.msg && res.msg.includes('新用户不存在')) {
			// 用户不存在
			console.log('用户不存在，响应数据:', res);
			return false;
		} else if (res.msg && res.msg.includes('该用户已经存在邀请关系')) {
			// 用户已存在邀请关系，说明用户存在
			isLoggedIn.value = true;
			console.log('用户已存在邀请关系，用户有效');
			return true;
		} else {
			// 其他错误
			console.log('用户验证失败，响应数据:', res);
			return false;
		}
	} catch (error) {
		console.error('验证用户失败:', error);
		return false;
	}
};

// 保存微信授权回调的登录信息
const saveLoginInfoFromCallback = (token: string, user_id: string, openid: string) => {
	try {
		const loginData = {
			token: token,
			user_id: user_id,
			openid: openid || '',
			login_time: Date.now()
		};
		
		// 保存到本地存储
		uni.setStorageSync('h5_login_data', JSON.stringify(loginData));
		uni.setStorageSync('h5_token', token);
		uni.setStorageSync('h5_user_info', JSON.stringify({
			id: user_id,
			openid: openid,
			nickname: '',
			avatar: '',
			mobile: '',
			token: token
		}));
		
		console.log('微信授权登录信息已保存');
		
		// 如果有邀请码，自动绑定邀请关系
		if (inviteCode.value && user_id) {
			console.log('准备自动绑定邀请关系:', {inviteCode: inviteCode.value, user_id: user_id});
			setTimeout(() => {
				bindInviteRelation();
			}, 1000);
		}
	} catch (error) {
		console.error('保存登录信息失败:', error);
	}
};

// 跳转到我的页面
const goToMyPage = () => {
	uni.reLaunch({
		url: '/pages/my/my'
	});
};
</script>

<style lang="scss" scoped>
@import './invite.scss';
</style>
